//
//  SongSearchOperation.m
//  MediaLibraryAccess_04
//
//  Created by 畑圭輔 on 10/02/07.
//  Copyright 2010 Keisuke Hata. All rights reserved.
//

#import "SongSearchOperation.h"


@implementation SongSearchOperation

@synthesize items = _items , resultsDeleate = _resultsDeleagte , searchTitle = _searchTitle;

- (id) initWithSearchItem : (NSString *)searchTitle searchQuery:(MPMediaQuery *)query {
	
	if( self = [super init] ) {
		_searchTitle = [searchTitle retain];
		_query = [query retain];
	}
	return self;
}

// NSOperationのメイン部
// 処理のブロック単位でこまめにスレッドがキャンセルされていないかチェックしておく必要がある。
// そうしないとキャンセルをかけた時に即座にキャンセルが行われない。
- (void) main {
	
	if( !self.isCancelled )
	{
		NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
		
		if( !self.isCancelled ) {
			NSLog(@"検索タイトル:%@",_searchTitle);

			// タイトルと部分一致するものを検索させる。
			MPMediaPropertyPredicate *predicate = 
									  // サーチボックスで入力したテキスト
			[MPMediaPropertyPredicate predicateWithValue:_searchTitle 
											// 楽曲のタイトル名を対象
											forProperty:MPMediaItemPropertyTitle 
											// 部分一致
											comparisonType:MPMediaPredicateComparisonContains];
			[_query addFilterPredicate:predicate];

			// 検索結果を受けとる。
			_items = [[_query items] retain];
			
			// 検索に使用したフィルタを削除する。
			[_query removeFilterPredicate:predicate];
			NSLog(@"マッチした数 : %d" , [_items count]);
		}
		[pool drain];
		
		// 終了時に登録したデリゲートを呼び出し、結果を格納したりする
		if( !self.isCancelled && _resultsDeleagte ) {
			[_resultsDeleagte operationFinishedSearch:self];
		}
	}
}

- (void) dealloc {
	
	[_searchTitle release];
	[_query release];
	[_items release];
	[super dealloc];
}

@end
